print("==========Number数字==========")
a = 6
b = 2
print(a / b)
print(a // b)

print(2 / 1)
print(2 // 1)
print(2 // 1.0)  # 注意：// 得到的并不一定是整数类型的数，它与分母分子的数据类型有关系。

print(2 * 4 / 1.5)

# 数学模块
import math

print('sin90度等于：', math.sin(90))

# 随机数模块
import random

print('随机数为：', random.random())
print("\a")  # 表示输出一个响铃符（ASCII码为7）。当运行这段代码时，终端会发出一声铃声。pycharm中不生效

print("==========字符串==========")
# 1、字符串格式化
print('我叫%s，来自%s，今年%d岁' % ('小胡', '河南', 18))

# 2、f标识符：f-string 是 python3.6 之后版本添加的，称之为【字面量格式化字符串】
name = '张三'
age = 18
print(f'我叫{name}，年龄{age}')
errHTML = """
<HTML><HEAD><TITLE>
Friends CGI Demo</TITLE></HEAD>
<BODY><H3>ERROR</H3>
<B>%s</B><P>
<FORM><INPUT TYPE=button VALUE=Back
ONCLICK="window.history.back()"></FORM>
</BODY></HTML>
"""
print(errHTML)

s1 = "aBcd"
print(s1.lower())  # 全部变为小写
print(s1.upper())  # 小写字母变为大写
print(s1.capitalize())  # 首字母变大写
print(s1.swapcase())  # 小写转大写，大写转小写
print("-----------------------")
s2 = 'www.baidu.com'
print(s2.count('.', 0, len(s2)))
print(s2.endswith('.com', 0, len(s2)))
print(s2.endswith('.com'))  # 判断是否以该字符串结尾
print(s2.startswith('www'))  # 判断是否以该字符串开头
print(s2.find('d'))  # 检测 str 是否包含在字符串中，如果指定开始索引，检测str是否包含在字符串中，开始索引索引从指定索引开始，如果不指定开始索引，则从字符串开始位置开始检测
print("-----------------------")
s3 = '123456'
print(s3.isdigit())  # 只包含数字则返回 True 否则返回 False
print('字符串长度为:', len(s3))  # len() 函数

p = '-'
print(p.join(s3))  # 以指定字符串作为分隔符

print("==========list列表==========")
list1 = ['google', 18, 'jd', '小米', '华为']
print(list1[0])  # 按下表取值，从0开始
print(list1[1])
print(list1[2])
print(list1[1:3])  # 截取区间，前闭后开，得到新的列表

list1[1] = 20  # 更新列表中的某一个值
print(list1)

del list1[2]  # 删除某一个元素
print(list1)

for x in list1:
    print(x, end='，')  # 遍历列表

list2 = [1, 2, 3]
print('组合后：', list1 + list2)  # 多个列表的组合，拼接

list3 = ['a', 'b']
x = [list3, list2]
print('列表嵌套后：', x)
print(x[0])
print(x[1])

print('----------自带函数-------')
print(len(x))  # 获取列表元素个数
print(len(x[1]))

print(max(list2))  # 获取最大值
print(min(list2))  # 获取最小值

tuple1 = (1, 2, 3)
print(tuple1)
print(list(tuple1))  # 将元组转换为列表

print('----------自带方法-------')
list3.append('c')  # 末尾追加一个元素，单个值
print(list3)

list3.extend(['e', 'f', 'g'])  # 末尾追加多个元素，列表对象
print(list3)

list4 = [1, 2, 3, 4, 1]
a = list4.count(1)  # 统计出现的次数
print(f'数字1出现了：{a}次')

idx_1 = list4.index(1)  # 获取该元素第一次出现的下标
print(f'数字1元素第一次出现的下标：{idx_1}')

list4.reverse()  # 反转列表中的元素
print(list4)

list5 = list4.copy()  # 复制列表
print(list5)

list5[:]  # 复制列表
print(list5)

list5.remove(1)  # 移除第一次出现该元素，并返回新的列表
print(list5)

list5.clear()  # 清空列表
print(list5)

print("==========Tuple元组==========")
t1 = (1, 2, 3)
print(t1)
print(type(t1))  # 查看类型

t2 = (1)  # 不加逗号
t3 = (1,)  # 加逗号
print('不加逗号:', type(t2))
print('加逗号:', type(t3))

print(t1[0])  # 下标取值
print(t1[1])
print(t1[0:2])  # 前闭后开，区间取值，返回新的元组

# t1[0] = 4  # 报错，因为元组不支持元素的修改

print(len(t1))  # 获取元组中元素的个数
print(t1 + t3)  # 多个元组组合，返回新的元组
print(t1 * 3)  # 复制n个
print(1 in t1)  # 判断是否包含
for x in t1: print(x, end='')  # 迭代
print('----------自带函数-------')
print(len(t1))  # 获取元组中元素的个数
print(max(t1))  # 返回元组中元素最大值。
print(min(t1))  # 返回元组中元素最小值。

list_demo = [4, 5, 6]
a = tuple(list_demo)  # 将可迭代序列转换为元组
print(a)

print("==========Dictionary字典==========")
"""
字典是另一种可变容器模型，且可存储任意类型对象。
字典的每个键值 key=>value 对用冒号 : 分割，每个对之间用逗号(,)分割，整个字典包括在花括号 {} 中 ,格式如下所示：
    d = {key1 : value1, key2 : value2, key3 : value3 }

注意：
键必须是唯一的，但值则不必。
值可以取任何数据类型，但键必须是不可变的，如字符串，数字。
"""
d1 = {}  # 创建空的字典
print(d1)
print(type(d1))

d2 = dict()  # 使用内建函数 dict() 创建字典
print(type(d2))
d2['name'] = 'taobao'
print('内建函数的值：', d2)
print(len(d2))  # 获取个数

d3 = {'name': 'Joy', 'age': 18}
print('名字：', d3['name'])  # 根据key获取value
print('年龄：', d3['age'])

d3['address'] = '河南'  # 新增元素到d3
print(d3)

d3['age'] = 22  # 修改key对应的value
print(d3)

del d3['age']  # 删除指定的key
print(d3)

# del d3  # 报错，不能这样清空或删除
# print(d3)

d3['name'] = 'Tom'  # 当出现相同的key时，最后一个key的值，会替换所有相同key的值
print(d3)

# d3.clear()  # 清空字典
# print(d3)

print('----------自带函数-------')
print(len(d3))  # 获取个数，即键的总数
print(str(d3))  # 输出字典，可以打印的字符串表示。
print('----------自带方法-------')
"""
d3.clear()  --> 清空
d4 = d3.copy()  --> 复制
'name' in d3    --> 判断是否包含
d3.items()  --> 列表返回一个视图对象
d3.values() --> 获取所有的value
"""
print('name' in d3)
print(d3.items())
print(d3.values())
print(d3.pop('name'))  # 删除字典给定键 key 所对应的值，返回值为被删除的值。key值必须给出。 否则，返回default值。
print(d3)

print("==========Set集合==========")
"""
无序，不可重复
创建集合两种方式：{}或set()
创建空集合必须使用set()，因为{}是创建空字典
"""
s1 = {}
s2 = set()
print(type(s1), type(s2))

s2.add('Tom')  # 添加元素
s2.add('Joy')
print(s2)

s2.update({'JD', 'baidu'})  # 添加元素，且参数可以是列表，元组，字典等
print(s2)

print('ABC' in s2)  # 判断是否包含
print('Tom' in s2)

s2.remove('JD')  # 移除指定的元素
print(s2)
# s2.remove('ABC')  # 当删除一个不存在的元素时，会报错
s2.discard('ABC')  # 移除集合中的元素，且如果元素不存在，不会发生错误
print(s2)

print(len(s2))  # 获取集合中的个数

s2.clear()  # 清空集合
print(s2)
print(len(s2))

s3 = {1, 2, 3}
s4 = {3, 4, 5}
jiaoji = set.intersection(s3, s4)  # 交集
print('交集是：', jiaoji)

bingji = set.union(s3, s4)  # 并集
print('并集是：', bingji)
